﻿@model Dosimetria.Models.DataAnnotations_Classes.Dosimetro
@{
    ViewBag.Title = "Crear HCD";
}

@*Validación de usuario, para que no se pueda acceder a la página sin estar logueado *@
@if (@User.Identity.Name == "")
{
    Layout = null;
    <div style="width:800px; font-size:2em; height:500px; text-align:center; margin-top:100px" class="division">
    @Html.ActionLink("Ingrese como usuario válido...", "Index", "Home")
    </div>
}
else
{
   
<html>
        
<head>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/ui.jqgrid.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/ui.multiselect.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/darkness-jquery-ui/css/dark-hive/jquery-ui-1.10.3.custom.css")" rel="stylesheet" type="text/css" />

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
 
<script src="@Url.Content("~/Scripts/grid.locale-es.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.jqGrid.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/grid.base.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/grid.common.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/grid.formedit.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/grid.inlinedit.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/grid.custom.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/TratamientoFechas/tratamientoFechas.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.numeric.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.10.3.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/DateTimePicker/jquery.ui.datepicker-es.js")" type="text/javascript"></script>


<script type="text/javascript">
    $(document).ready(function () {

        $(function () {
            $("#fEnvio").datepicker({
                changeMonth: true,
                changeYear: true,
                showButtonPanel: true,
                showWeek: true,
                firstDay: 1
            });

            $("#fechaRecepcionDosimetros").datepicker({
                changeMonth: true,
                changeYear: true,
                showButtonPanel: true,
                showWeek: true,
                firstDay: 1,
                onSelect: function (dateText, inst) {
                    var now = new Date();
                    var trasitivo = dateText.split("/");
                    fechaSeleccionada = new Date(trasitivo[2], trasitivo[1] - 1, trasitivo[0]);

                    if (fechaSeleccionada.getFullYear() > now.getFullYear()) {
                        alert("La fecha de recepción no puede ser mayor a la actual");
                        $("#fechaRecepcionDosimetros").val("");
                        $(this).datepicker.show();

                    }
                    else if (fechaSeleccionada.getMonth() + 1 > now.getMonth() + 1) {
                        alert("La fecha de recepción no puede ser mayor a la actual");
                        $("#fechaRecepcionDosimetros").val("");
                        $(this).datepicker.show();
                    }
                    else if (fechaSeleccionada.getDate() > now.getDate()) {
                        alert("La fecha de recepción no puede ser mayor a la actual");
                        $("#fechaRecepcionDosimetros").val("");
                        $(this).datepicker.show();
                    }
                }
            })
        });

        cargarGrilla();

        $("#nContrato, #codigoDosimetro").numeric({ decimal: false, negative: false }, function () { this.value = ""; this.focus(); });

        $("#codigoDosimetro").focus(function () {
            $("#fEnvio").val("");
            $("#nContrato").val("");
            $("#numContrato").text("       ");
            $("#fechaEnvio").text("     ");
        });

        $("#fEnvio").focus(function () {
            $("#codigoDosimetro").val("");
            $("#numContrato").text("       ");
            $("#fechaEnvio").text("     ");
        });

        $("#nContrato").focus(function () {
            $("#codigoDosimetro").val("");
            $("#numContrato").text("       ");
            $("#fechaEnvio").text("     ");
        });

        //Evento que controla obtiene los datos de un dosimetro en funcion del id
        $("#buscar").click(function () {
            borrarDataGrilla();
            if ($("#codigoDosimetro").val().trim() != "") {
                cargaDatosDosimetro();
            }
            else {
                getDataDosimetros($("#nContrato").val().trim(), $("#fEnvio").val().trim());
            }
        });

        $("#codigoDosimetro").change(function () {
            borrarDataGrilla()
            cargaDatosDosimetro();
        });



        function cargarDataDosimetroByFechaEnvioAndCodContrato() {
            $("#numContrato").text("       ");
            $("#codDosim").text("");
            $("#fechaEnvio").text("     ");
            $.ajax({
                type: "Post",
                async: true,
                datatype: "json",
                url: "getContratoAndDataDosimetroByIdDosimetro?idDosimetro=" + $('#codigoDosimetro').val(),
                success: function (data) {

                    if (data.Result != null) {
                        $.each(data.Result.lContrato, function (k, v) {
                            $("#numContrato").text(v.codigoContrato + "          ");
                        });

                        var dateComplete = new Date(parseInt(data.Result.fechaEnvio.substr(6)));
                        var month = numberMonthToCorrectNumberMonth(dateComplete.getMonth());
                        var fecha = setCompleteDay(dateComplete.getDate()) + "/" + setCompletMonth(month) + "/" + dateComplete.getFullYear();
                        $("#fechaEnvio").text(fecha + "             ");
                    }
                    else {
                        alert("No existe dosimetro asociado");
                        $("#codDosim").text("");
                    }
                }
            });
        }
        function cargaDatosDosimetro() {
            $("#numContrato").text("       ");
            $("#codDosim").text("");
            $("#fechaEnvio").text("     ");
            $.ajax({
                type: "Post",
                async: true,
                datatype: "json",
                url: "getContratoAndDataDosimetroByIdDosimetro?idDosimetro=" + $('#codigoDosimetro').val(),
                success: function (data) {

                    if (data.Result != null) {
                        $.each(data.Result.lContrato, function (k, v) {
                            $("#numContrato").text(v.codigoContrato + "          ");
                        });

                        var dateComplete = new Date(parseInt(data.Result.fechaEnvio.substr(6)));
                        var month = numberMonthToCorrectNumberMonth(dateComplete.getMonth());
                        var fecha = setCompleteDay(dateComplete.getDate()) + "/" + setCompletMonth(month) + "/" + dateComplete.getFullYear();
                        $("#fechaEnvio").text(fecha + "             ");

                        //Cargo los dosimetros en la grilla
                        getDataDosimetros($('#numContrato').text(), $('#fechaEnvio').text());
                    }
                    else {
                        alert("No existe dosimetro asociado");
                        $("#codDosim").text("");
                    }
                }
            });
        }
        function cargarGrilla() {
            jQuery("#list").jqGrid({
                datatype: 'local',
                colNames: ['codigoUnicoDosim', 'N° Dosimetro', 'Tipo', 'Usuario Asociado', 'Devuelto', 'Dañado', 'Extraviado', 'Sin uso', 'Reasignado', 'Fin de Control', 'Observación', 'fechaEnvioDosimetro', 'codContrato', 'HCDID', 'fechaRecepcion', 'comentarioHCD', 'func_cod'],
                colModel: [
                                      { name: 'codigoUnicoDosim', index: 'codigoUnicoDosim', width: 150, align: 'left', hidden: true },
                                      { name: 'NDosimetro', index: 'NDosimetro', width: 150, align: 'left' },
                                      { name: 'TipoDosimetro', index: 'TipoTipoDosimetro', width: 150, align: 'left' },
                                      { name: 'nombreFuncionario', index: 'nombreFuncionario', width: 150, align: 'left' },
                                      {
                                          name: 'Devuelto', index: 'Devuelto', width: 80, align: 'center', editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
                                          formatter: "checkbox", formatoptions: { disabled: false }, sortable: false
                                      },
                                      {
                                          name: 'Daniado', index: 'Daniado', width: 120, align: 'center', editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
                                          formatter: "checkbox", formatoptions: { disabled: false }, sortable: false
                                      },
                                      {
                                          name: 'Extraviado', index: 'Extraviado', width: 120, align: 'center', editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
                                          formatter: "checkbox", formatoptions: { disabled: false }, sortable: false
                                      },
                                      {
                                          name: 'SinUso', index: 'SinUso', width: 120, align: 'center', editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
                                          formatter: "checkbox", formatoptions: { disabled: false }, sortable: false
                                      },
                                      {
                                          name: 'Reasignado', index: 'Reasignado', width: 120, align: 'center', editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
                                          formatter: "checkbox", formatoptions: { disabled: false }, sortable: false
                                      },
                                      {
                                          name: 'FinControl', index: 'FinControl', width: 120, align: 'center', editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
                                          formatter: "checkbox", formatoptions: { disabled: false }, sortable: false
                                      },
                                      {
                                          name: 'Observacion', index: 'Observacion', width: 200, editable: true, edittype: "text", editoptions: { maxlength: 50 }
                                      },
                                      { name: 'fechaEnvioDosimetro', index: 'fechaEnvioDosimetro', width: 150, align: 'left', hidden: true },
                                      { name: 'codContrato', index: 'codContrato', width: 150, align: 'left', hidden: true },
                                      { name: 'HCDID', index: 'HCDID', width: 150, align: 'left', hidden: true },
                                      { name: 'fechaRecepcion', index: 'fechaRecepcion', width: 150, align: 'left', hidden: true },
                                      { name: 'comentarioHCD', index: 'comentarioHCD', width: 150, align: 'left', hidden: true },
                                      { name: 'func_cod', index: 'func_cod', width: 150, align: 'left', hidden: true }

                          ],

                pager: '#gridpager',
                emptyrecords: "Nada para mostrar",
                toppager: true,
                rowNum: 20,
                rowList: [20, 40, 60],
                sortname: 'Tipo',
                sortorder: 'asc',
                viewrecords: true,
                gridview: true,
                //imgpath: '/content/cupertino/images',
                caption: 'HCD',
                height: 400,
                width: 900,
                cellsubmit: 'clientArray',
                editurl: "clientArray",
                onCellSelect: function (rowid, iCol, cellcontent, e) {
                    if (iCol == 10) {
                        jQuery('#list').editRow(rowid, true);
                    }
                },
                afterSaveCell: function (id, name, val, iRow, iCol) {
                },
                afterEditCell: function (id, name, val, iRow, iCol) {
                }
            });
        }
        $("#guardarData").click(function () {
            var dataArray = $("#list").jqGrid('getRowData');
            if (dataArray.length != 0) {
                var fechaRecepcionDosimetro = $("#fechaRecepcionDosimetros").val();
                resFlag = validaIngresoFecha(dataArray, fechaRecepcionDosimetro);
                if (resFlag) {
                    arrayDatos = agregarFechaRecepcionAndObservacionHCD(dataArray, fechaRecepcionDosimetro, $("#observacionHCD").val());
                    $.ajax({
                        type: "Post",
                        async: true,
                        contentType: 'application/jsonp',
                        url: "saveHCD",
                        data: JSON.stringify(dataArray),
                        success: function (data) {
                            reenvioReasignacion(dataArray, $("#numContrato").text().trim(), $("#fechaEnvio").text().trim());
                            alert("registro realizado exitosamente");
                            borrarDataGrilla();

                        }
                    });
                }
                else {
                    alert("Debe ingresar una fecha de recepción a los dosimetros marcados como devueltos");
                }
            }
            else {
                alert("Favor realice la busqueda de dosimetro");
            }
        });

        //Funcion que reenvia a reasignacion siempre y cuando exista al menos un dosimetro marcado como reasignado
        function reenvioReasignacion(dataArray, codContrato, fechaEnvio) {
            var flagReasignado = false;
            $.each(dataArray, function (key, value) {
                //En caso que exista un solo reasignado se reenviara a Reasgnacion
                if (value.Reasignado == "True") {
                    flagReasignado = true;
                }
            });
            if (flagReasignado) {
                var url = 'Reasignacion?codigoContrato=' + codContrato + "&fechaEnvio=" + fechaEnvio;
                $(location).attr('href', url);
            }
            else {
                $("#numContrato").text("    ");
                $("#fechaEnvio").text("     ");
            }

        }

        //Funcion que valida si existe algun dosimetro marcado como enviado y envia un msje sino se ha ingresado una fecha de recepcion
        function validaIngresoFecha(dataArray, fechaRecepcion) {
            for (var i = 0; i < dataArray.length; i++) {
                if (dataArray[i].Devuelto == 'True') {
                    return fechaRecepcion.trim() == "" ? false : true;
                }
            }
            return true;
        }

        //Funcion que agrega la fecha de recepcion y observacionHCD del dosimetro al data 
        //Cabe señalar que posteriormente solo se guardara la observacion en la tabla HCD
        //se realiza de esta manera ya que se debe enviar un JSON
        function agregarFechaRecepcionAndObservacionHCD(dataArray, fechaRecepcionDosim, observacionHCD) {

            for (var i = 0; i < dataArray.length; i++) {
                if (observacionHCD.trim() != "") {
                    dataArray[i].comentarioHCD = observacionHCD;
                }
                if (dataArray[i].Devuelto == 'True') {
                    dataArray[i].fechaRecepcion = fechaRecepcionDosim;
                }
            }
            return dataArray;
        }

        $(document).delegate('#list >tbody >tr > td > input[type="checkbox"]', 'change', function () {
            //Obtengo la columna y luego la fila dentro de esa columna que fue seleccionada
            var col = $(this).parent().index();
            var fila = $(this).parent().parent().index();
            // alert('Has clickado sobre la fila: ' + col + "  " + fila);

            //Columna 4: Devuelto
            //Columna 5: Dañado
            //Columna 6: Extraviado
            //Columna 7: Sin uso 
            //Columna 8: Reasignado
            //Columna 9: fin de control

            /**
            Hay que tener en cuenta que el valor que trae es siempre el contrario...
            por ej si la grilla posee checkeado un valor se mostrara como true y debemos validar si en efecto ese cambio se puede realizar

            **/
            if (col == 4) { //Devuelto
                //En caso de marcar devuelto no puede marcarse extraviado (Se realiza uncheck en dicho caso)
                var checkExtraviado = busquedaCheckBox(fila, col + 2);
                checkExtraviado.prop('checked', false);
            }
            else if (col == 5) { //Daniado
                var checkDevuelto = busquedaCheckBox(fila, col - 1);
                var checkExtraviado = busquedaCheckBox(fila, col + 1);
                var checkSinUso = busquedaCheckBox(fila, col + 2);
                var checkReasignado = busquedaCheckBox(fila, col + 3);
                var finControl = busquedaCheckBox(fila, col + 4);
                checkExtraviado.prop('checked', false);
                checkDevuelto.prop('checked', true);
                checkSinUso.prop('checked', false);
                checkReasignado.prop('checked', false);
                finControl.prop('checked', false);
            }
            else if (col == 6) { //Extraviado
                //En caso de marcar extraviado no puede marcarse devuelto (Se realiza uncheck en dicho caso)
                var checkDevuelto = busquedaCheckBox(fila, col - 2);
                var checkDaniado = busquedaCheckBox(fila, col - 1);
                var checkSinUso = busquedaCheckBox(fila, col + 1);
                var checkReasignado = busquedaCheckBox(fila, col + 2);
                var checkFinControl = busquedaCheckBox(fila, col + 3);
                checkSinUso.prop('checked', false);
                checkDaniado.prop('checked', false);
                checkDevuelto.prop('checked', false);
                checkReasignado.prop('checked', false);
                checkFinControl.prop('checked', false);
            }
            else if (col == 7) { //Sin Uso
                var checkDevuelto = busquedaCheckBox(fila, col - 3);
                var checkExtraviado = busquedaCheckBox(fila, col - 1);
                checkDevuelto.prop('checked', true);
                checkExtraviado.prop('checked', false);
            }
            else if (col == 8) { //Reasignado
                var checkDevuelto = busquedaCheckBox(fila, col - 4);
                var checkExtraviado = busquedaCheckBox(fila, col - 2);
                var checkDaniado = busquedaCheckBox(fila, col - 3);
                checkDevuelto.prop('checked', true);
                checkExtraviado.prop('checked', false);
                checkDaniado.prop('checked', false);
            }
            else if (col == 9) {
                var checkDevuleto = busquedaCheckBox(fila, col - 5);
                var checkExtraviado = busquedaCheckBox(fila, col - 3);
                checkDevuleto.prop('checked', true);
                checkExtraviado.prop('checked', false);
            }
        });

        function busquedaCheckBox(fila, columna) {
            return $("#list > tbody ").find("tr").eq(fila).find("td").eq(columna).children();
        }

        $("#allDevueltos").click(function () {
            if ($("#list > tbody > tr").length > 1) {
                $("#list > tbody > tr").each(function () {
                    var checkboxDevuelto = $(this).find("td").eq(4).children();
                    !$("#allDevueltos").prop('checked') ? checkboxDevuelto.prop('checked', false) : checkboxDevuelto.prop('checked', true);
                });
            }
            else {
                alert("Debe realizar una busqueda por alguno de los criterios para poder usar esta opción");
                $(this).prop("checked", false);
            }
        });

        function borrarDataGrilla() {
            var largoGrilla = $('#list >tbody >tr').length;
            if (largoGrilla > 0) {
                for (var i = 0; i <= largoGrilla; i++) {
                    jQuery("#list").delRowData(i);
                }
            }
        }

        ///Funcion transitiva pues se debe llamar a dos peticiones ajax, en caso de existir datos en HCD se deben cargar los dosimetros
        //en caso contrario se debe cargar los dosimetros relacionados
        function getDataDosimetros(numContrato, fechaEnvio) {
            getDataHCDDosimetroHCD(numContrato, fechaEnvio);
        }


        function getDosimetrosRelacionadosByCodigoContratoAndFechaEnvioDosim(numContrato, fechaEnvio) {
            $.ajax({
                type: "Post",
                async: true,
                datatype: "json",
                url: "getDosimetrosRelacionadosByCodigoContratoAndFechaEnvioDosim?codigoContrato=" + numContrato + "&fechaEnvio=" + fechaEnvio,
                success: function (data) {
                    if (data.Result != null) {
                        for (var i = 0; i < data.Result.length; i++) {
                            jQuery("#list").jqGrid('addRowData', $('#list >tbody >tr').length, data.Result[i]);
                        }
                        $("#fechaEnvio").text(fechaEnvio);
                        $("#numContrato").text(numContrato);
                    }
                }
            });
        }

        //funcion utilizada para llamar los dosimetros desde la tabla hcdDosimetros
        function getDataHCDDosimetroHCD(numContrato, fechaEnvio) {
            $.ajax({
                type: "Post",
                async: true,
                datatype: "json",
                url: "getDataHCDDosimetroHCD?codigoContrato=" + numContrato + "&fechaEnvio=" + fechaEnvio,
                success: function (data) {
                    if (data.Result != null) {
                        if (data.Result.length > 0) {
                            var codigoDosimetro = "";
                            codigoDosimetro = $("#codigoDosimetro").val();
                            if (codigoDosimetro != "") {
                                validarExistenciaDosimetro(data, codigoDosimetro);
                            }
                            
                            for (var i = 0; i < data.Result.length; i++) {
                                jQuery("#list").jqGrid('addRowData', $('#list >tbody >tr').length, data.Result[i]);
                            }
                            $("#fechaEnvio").text(fechaEnvio);
                            $("#numContrato").text(numContrato);
                        }
                        else {
                            //Valido si existe data en HCD_Dosimetros en funcion de numero de contrato y fecha de envio
                            //caso que la hcd se halla devuelto todos los dosimetros 
                            $.ajax({
                                type: "Post",
                                async: true,
                                datatype: "json",
                                url: "checkExistenciaInHCDDosimetroByCodContratoAndFechaEnvio?codigoContrato=" + numContrato.trim() + "&fechaEnvio=" + fechaEnvio,
                                success: function (data) {
                                    console.log(data);
                                    if (data != 0) {
                                        alert("Todos los dosimetros fueron devueltos");
                                        console.log(data);
                                    }
                                    else {
                                        getDosimetrosRelacionadosByCodigoContratoAndFechaEnvioDosim(numContrato, fechaEnvio);
                                    }
                                }
                            });

                        }
                    }
                }
            });
        }

        //Funcion que valida si la HCD trae la informacion del codigo de dosimetro ingresado
        function validarExistenciaDosimetro(data, codigoDosimetro) {
            var flag = true;
            for (var i = 0; i < data.Result.length; i++) {
                //Si comparo con el listado de dosimetros y el codigo buscado existe, es decir, no se encuentra devuelto
                // el flag es false en caso contrario sera true para mostrar el msje que el dosimetro se encuentra devuelto
                if (data.Result[i].NDosimetro == codigoDosimetro) {
                    flag = false;
                }
            }

            var dummy = 1;

            flag == true ? alert("Dosimetro devuelto no aparecera en HCD") : dummy = 1;
        }
    });

    function cargaFechaActualRecepcion() {
        var f = new Date();
        $("#fechaRecepcionDosimetros").val(f.getDate() + "/" + (f.getMonth() + 1) + "/" + f.getFullYear());
    }

</script>

</head>

<body onload="cargaFechaActualRecepcion()" >


<h2>Recepci&oacuten de Dos&iacutemetros</h2>    

        @Html.ValidationSummary(true)
         <div class="editor-grilla">
                    
                   
                    @Html.Label("Número dosímetro")
                    @Html.EditorFor(model => model.codigoDosimetro)
                    @Html.ValidationMessageFor(model => model.codigoDosimetro)   
                    
                    <br /> <br />
                    Fecha de Envio &nbsp &nbsp <input type="text" id="fEnvio" />
                    Num. Contrato <input type="text" id="nContrato" />
                                 
        <button id="buscar">Ver </button>
        <br />
      

         <input type="hidden" id="codDosim" />
         <br />
         <br />
                <b><label title="" id="" >Numero de Contrato: </label></b>
                <label id="numContrato">&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp
                                        &nbsp &nbsp &nbsp &nbsp &nbsp</label>

                <b> <label> Fecha de Env&iacuteo:</label> </b>
               <label id="fechaEnvio">&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp</label>
                
                @*<button id="agregar">Agregar</button>*@
         </div>
            
            <div class="editor-grilla">

              <table id="list" class="scroll" cellpadding="0" cellspacing="0"></table>
               @* <div id="pager" class="scroll" style="text-align:center;"></div>*@
               <div id="gridpager" class="scroll" style="text-align:center;"></div> 
               <br />
               <input type="checkbox"  id="allDevueltos" /> Marcar todos devueltos &nbsp
               Comentario: <input type="text" id="observacionHCD" /> 
               Fecha Recepción Dosimetros: <input type="text" id="fechaRecepcionDosimetros" />
               <button id="guardarData">Realizar Registro</button>
               <br />
               <br />
            </div>
</body>
      </html>
}